/*!
	@author Angéline Guignard & Adrien Megueddem
	@copyright Imagimp
	@language C
	@header Header de Gestion de LUT
		La gestion de tous ce qui concerne les LUT comme l'ajout
		de LUT, la suppression de LUT etc...
	@updated 2012-01-10
 */

/*!
	@class LUT
	@discussion Cette classe LUT permet de faire
	la gestion de tous ce qui concerne les LUT.
*/

#ifndef _GLIMAGIMP__LUT_H___
#define _GLIMAGIMP__LUT_H___

/**************
** Structures **
**************/

/*!
    @typedef Structure d'un LUT
    @abstract Structure qui définit ce qu'est un LUT
    @field tab tableau de pixel
    @field nextLut donne accès à la lut suivante de la liste chainee.
    @discussion Ici tu racontes ta vie ou celle de la fonction
 */
typedef struct lut{
	unsigned char* tabR;
	unsigned char* tabG;
	unsigned char* tabB;
	struct Lut* nextLut;
}Lut;

typedef Lut* ListeLut;

/*! initLut() permet d'initialiser un nouveau lut
	@result
		renvoi le lut créer.
 */
extern Lut* initLut();

/*! lastLut() va a la dernier liste de lut
	@param l
		ListeLut l on prend la liste de lut du calque courant en paramètre 
	@result
		on renvoit le dernier lut
 */
extern ListeLut lastLut(ListeLut l);

/*! addlum() on creer un lut pour ajouter de la luminosité
	@param val
		unsigned char val on prend une valeur en parametre pour augmenter la luminosité
	@result
		on renvoit le lut crée
 */
extern ListeLut addlum(ListeLut l, unsigned char val);

/*! dimlum() on cree un lut pour diminuer de la luminosité
	@param val
		unsigned char val on prend une valeur en parametre pour diminuer la luminosité
	@result
		on renvoit le lut crée
 */
extern ListeLut dimlum(ListeLut l, unsigned char val);

/*! addcon() on cree un lut pour augmenter le contraste
	@param val
		unsigned char val on prend une valeur en parametre pour augmenter le contraste
	@result
		on renvoit le lut crée
 */
extern ListeLut addcon(ListeLut l, unsigned char val);

/*! dimcon() on cree un lut pour diminuer le contraste
	@param val
		unsigned char val on prend une valeur en parametre pour diminuer le contraste
	@result
		on renvoit le lut crée
 */
extern ListeLut dimcon(ListeLut l, unsigned char val);

/*! inverse() on cree un lut pour inverser les couleurs
	@result
		on renvoit le lut crée
 */
extern ListeLut invert(ListeLut l);

/*! sepia() on cree un lut pour inverser les couleurs
	@result
		on renvoit le lut crée
 */
extern ListeLut sepia(ListeLut l);

/*! addLut() permet d'ajouter une lut a la liste de lut
	@param l
		ListeLut l on prend la liste de lut du calque courant en paramètre 
	@result
		on ajoute la lut crée en fct des touches tapées
 */
extern ListeLut addLut(ListeLut l, Lut* lut);

#endif